package com.yssoft.controller.core;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import com.google.common.collect.Lists;
import com.yssoft.controller.BaseController;
import com.yssoft.entity.core.TFunctions;
import com.yssoft.entity.core.TRoles;
import com.yssoft.service.core.RoleService;
import com.yssoft.utils.LayuiUtils;

/**
 * 
 * @类名称: RoleController
 * @类描述: 角色控制器
 * @作者:洪丰
 * @创建时间:2018年4月24日 上午11:43:06
 */
@Controller
@RequestMapping(value = "/role")
public class RoleController extends BaseController
{
	@Autowired
	private RoleService roleService;

	/**
	 * @方法名称: list
	 * @功能描述: 跳转到列表页
	 * @作者:洪丰
	 * @创建时间:2018年4月24日 下午1:05:00
	 * @return String
	 */
	@RequestMapping(value = "/list")
	public String list(Model model){
		
		return "core/role/roleList";
	}

	/**
	 * @方法名称: queryDate
	 * @功能描述: 获取列表数据
	 * @作者:洪丰
	 * @创建时间:2018年4月24日 下午3:16:13
	 * @param params
	 * @return LayuiUtils
	 */
	@ResponseBody
	@RequestMapping(value = "/queryDate")
	public LayuiUtils queryDate(@RequestParam(value = "page", defaultValue = "1") int page,
			int limit,String roleName){
		HashMap<String, Object> searchParams = new HashMap<String, Object>();
		if(null != roleName && !"".equals(roleName)){
			searchParams.put("name", roleName);
		}
		List<Map<String, Object>> roleList = roleService.queryPage(page, limit, searchParams); 
		int total = roleService.queryTotal(searchParams);
		return LayuiUtils.data(total, roleList);
	}
	
	/**
	 * @方法名称: add
	 * @功能描述: 跳转到新增页面
	 * @作者:洪丰
	 * @创建时间:2018年4月24日 下午1:05:29
	 * @param model
	 * @return String
	 */
	@RequestMapping(value = "create", method = RequestMethod.GET)
	public String add(Model model) {
		model.addAttribute("action", "save");
		model.addAttribute("entity", new TRoles());
		return "core/role/roleForm";
	}
	
	/**
	 * @方法名称: save
	 * @功能描述: 保存角色
	 * @作者:洪丰
	 * @创建时间:2018年4月24日 下午1:06:05
	 * @param entity
	 * @param redirectAttributes
	 * @return String
	 */
	@RequestMapping(value = "save")
	public String save(TRoles entity, RedirectAttributes redirectAttributes) {
		try {
			roleService.addAcc(entity);
			redirectAttributes.addFlashAttribute("message", "保存成功!");
		} catch (Exception e) {
			e.printStackTrace();
			redirectAttributes.addFlashAttribute("message", "保存失败!");
		}
		return "redirect:list";
	}
	
	/**
	 * @方法名称: update
	 * @功能描述: 跳转到修改页面
	 * @作者:洪丰
	 * @创建时间:2018年4月24日 下午1:31:53
	 * @param id
	 * @param model
	 * @return String
	 */
	@RequestMapping(value = "update/{id}", method = RequestMethod.GET)
	public String update(@PathVariable("id") Integer id, Model model) {

		model.addAttribute("action", "update");
		model.addAttribute("entity", this.roleService.queryRoleById(id));

		return "core/role/roleForm";
	}
	
	/**
	 * @方法名称: view
	 * @功能描述: 查看详细
	 * @作者:洪丰
	 * @创建时间:2018年4月25日 下午2:28:34
	 * @param id
	 * @param model
	 * @return String
	 */
	@RequestMapping(value = "view/{id}", method = RequestMethod.GET)
	public String view(@PathVariable("id") Integer id, Model model) {
		model.addAttribute("entity", this.roleService.queryRoleById(id));
		List<TFunctions> funList = roleService.queryRoleAndFun(id);
		model.addAttribute("funList",funList);
		return "core/role/roleView";
	}
	
	/**
	 * @方法名称: update
	 * @功能描述: 修改角色
	 * @作者:洪丰
	 * @创建时间:2018年4月24日 下午1:38:11
	 * @param entity
	 * @param redirectAttributes
	 * @return String
	 */
	@RequestMapping(value = "update")
	public String update(TRoles entity, RedirectAttributes redirectAttributes) {
		try {
			roleService.editAcc(entity);
			redirectAttributes.addFlashAttribute("message", "保存成功!");
		} catch (Exception e) {
			e.printStackTrace();
			redirectAttributes.addFlashAttribute("message", "保存失败!");
		}
		return "redirect:list";
	}
	
	/**
	 * @方法名称: delete
	 * @功能描述: 删除角色
	 * @作者:洪丰
	 * @创建时间:2018年4月24日 下午1:38:35
	 * @param id
	 * @param redirectAttributes
	 * @return String
	 */
	@RequestMapping(value = "delete", method = RequestMethod.POST)
	@ResponseBody
	public String delete(@RequestParam(value = "roleIds") String roleIds) {
		String [] roleIdArray = roleIds.split(",");
		String result = "1";
		for(String id : roleIdArray){
			int resultInt = roleService.delAccById(Integer.parseInt(id));
			if(resultInt <= 0){
				result = "0";
			}
		}
        return result;
	}
	
	/**
	 * @方法名称: tofunctionTree
	 * @功能描述: 跳转到功能树页面
	 * @作者: 洪丰
	 * @创建时间:2018年5月24日 下午4:31:57
	 * @param model
	 * @return String
	 */
	@RequestMapping(value = "/tofunctionTree")
	public String tofunctionTree(Integer roleId,Model model){
		model.addAttribute("roleId", roleId);
		return "core/role/functionsTree";
	}
	/**
	 * @方法名称: queryProCla
	 * @功能描述: 
	 * @作者: 洪丰
	 * @创建时间:2018年5月3日 下午5:04:36
	 * @param roleId
	 * @param model
	 * @return String
	 */
	@ResponseBody
	@RequestMapping("/queryFunctionTree")
	public String queryProCla(Integer roleId) {
		List<TFunctions> roleAndfunList = Lists.newArrayList();
		if(null != roleId){
			roleAndfunList = roleService.queryRoleAndFun(roleId);
		}
		String functionTree = roleService.findFunctionTree(roleAndfunList);
		return functionTree;
	}
	
	/**
	 * @方法名称: updateFun
	 * @功能描述: 更新功能
	 * @作者:洪丰
	 * @创建时间:2018年4月25日 下午5:43:46
	 * @param funIds
	 * @param redirectAttributes
	 * @return String
	 */
	@ResponseBody
	@RequestMapping(value = "updateFun", method = RequestMethod.POST)
	public String updateFun(String funIds,int roleId) {
		String result = "0";
		try {
			roleService.editAccFun(funIds,roleId);
			result = "1";
		} catch (Exception e) {
			e.printStackTrace();
			result = "0";
		}
		return result;
	}
	
	/**
	 * @方法名称: delete
	 * @功能描述: 校验角色名是否重复
	 * @作者: 洪丰
	 * @创建时间: 2018年4月28日 上午10:02:12
	 * @param roleIds
	 * @return String
	 */
	@RequestMapping(value = "checkName", method = RequestMethod.POST)
	@ResponseBody
	public String checkName(@RequestParam(value = "checkName") String checkName) {
		String result = "1";
		TRoles role = new TRoles();
		role.setName(checkName);
		
		int resultInt = roleService.queryRoleByRecord(role);
		if(resultInt > 0){
			result = "0";
		}
        return result;
	}
	
	/**
	 * @方法名称: checkCode
	 * @功能描述: 校验角色code是否重复
	 * @作者: 洪丰
	 * @创建时间:2018年5月29日 下午4:46:56
	 * @param checkCode
	 * @return String
	 */
	@RequestMapping(value = "checkCode", method = RequestMethod.POST)
	@ResponseBody
	public String checkCode(@RequestParam(value = "checkCode") String checkCode) {
		String result = "1";
		TRoles role = new TRoles();
		role.setCode(checkCode);
		int resultInt = roleService.queryRoleByRecord(role);
		if(resultInt > 0){
			result = "0";
		}
        return result;
	}
}
